#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 点击新建按钮，弹出一个对话框
    connect(ui->actionNew, &QAction::triggered, [=] {
        // 对话框 分类
        // 模态对话框（不可以对其他窗口进行操作） 非模态对话框（可以对其他窗口进行操作）
        // 模态创建，阻塞
//        QDialog dlg(this);
//        dlg.resize(200, 100);   // 窗口太小，会打印告警信息
//        qDebug() << "模态对话框弹出了";
//        dlg.exec();

        // 非模态对话框
//        QDialog dlg2(this); // 栈上的对象，执行完就释放了，所以窗口会一闪而过
//        dlg2.resize(200, 100);
//        dlg2.show();  // 不会阻塞

        // 堆上的内存，虽然将dlg2添加到了对象树中，我们不用关心释放操作
        // 但是依然存在内存泄漏问题，因为dlg2的内存释放是在程序结束后释放的
        // 如果程序不结束，无限点击按钮，就会创建N个dlg2的内存，会有内存耗尽的风险
        // 验证这个问题的方法：可以自定义一个类，继承QDialog，在析构函数中加入打印信息
//        QDialog *dlg2 = new QDialog(this);
//        dlg2->resize(200, 100);
//        dlg2->show();
//        qDebug() << "非模态对话框弹出了";

        // 怎样才能在窗口关闭时就释放这块内存呢？
        QDialog *dlg3 = new QDialog(this);
        dlg3->resize(200, 100);
        dlg3->setAttribute(Qt::WA_DeleteOnClose);
        dlg3->show();
        qDebug() << "非模态对话框弹出了";
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}

